﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace KioskosJugandoLimpio.Encuestas
{
    public partial class Encuesta : System.Web.UI.Page
    {
        private List<Classes.Respuesta> respuestas;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.HttpMethod == "GET")
            {
                if (null != Request.QueryString["idEncuestas"])
                {
                    Classes.Encuesta encuesta = new Classes.Encuesta(int.Parse(Request.QueryString["idEncuestas"]));
                    DivEncuesta.Controls.Add(encuesta.form);
                    txtidEncuestas.Value = Request.QueryString["idEncuestas"];
                }
            }
            if (Request.HttpMethod == "POST") {
                string serialized = txtForm.Value;
                string[] splitted = serialized.Split('|');
                Hashtable answers = new Hashtable();
                foreach (string keyValue in splitted) {
                    string[] separated = keyValue.Split('^');
                    string value = separated[1];
                    string key = separated[0].Split('_')[0];
                    if (value.Substring(0, 1) == "~")
                    {
                        answers.Add(key, value);
                    }
                    else
                    {
                        if (!answers.ContainsKey(key)) {
                            answers[key] = new List<string>();
                        }
                        {
                            ((List<string>)(answers[key])).Add(value);
                        }
                    }
                }
                guardar(answers);
                Response.Redirect("../Admin/Graficas.aspx?idEncuestas="+txtidEncuestas.Value);
            }
        }

        private void guardar(Hashtable answers)
        {
            System.Data.SqlClient.SqlTransaction tran = Classes.SQL.fnGetTran();
            try
            {
                Classes.Encuesta encuesta = new Classes.Encuesta(int.Parse(Request.QueryString["idEncuestas"]));
                string CURP = Guid.NewGuid().ToString();
                string Paterno = CURP;
                string Materno = CURP;
                string Nombre = CURP;
                string sexo = __cmbSexo.SelectedValue;
                int edad = int.Parse(__cmbEdad.SelectedValue);
                string escolaridad = __cmbEscolaridad.SelectedValue;
                Classes.Ciudadano ciudadano = new Classes.Ciudadano(CURP, Nombre, Paterno, Materno, edad, sexo,escolaridad, 1);
                respuestas = new List<Classes.Respuesta>();
                foreach (string key in answers.Keys)
                {
                    int idPregunta;
                    if (key != "txtCURP" && int.TryParse(key,out idPregunta))
                    {
                        Classes.Respuesta respuesta = new Classes.Respuesta(encuesta);
                        respuesta.ciudadano = ciudadano;
                        respuesta.pregunta = new Classes.Pregunta(idPregunta);
                        if (answers[key] is List<string>)
                        {
                            foreach (string value in (List<string>)(answers[key]))
                            {
                                respuesta.opciones.Add(new Classes.Opcion(int.Parse(value)));
                            }
                        }
                        else
                        {
                            respuesta.respuesta = answers[key].ToString().Substring(1);
                        }
                        respuestas.Add(respuesta);
                    }
                }
                ciudadano.idCiudadano = ciudadano.idCiudadanos;
                
                foreach (Classes.Respuesta respuesta in respuestas)
                {
                    respuesta.guardar(tran);
                }
                tran.Commit();
            }catch(Exception ex){
                Classes.SQL.fnRollback(tran);
            }
        }
    }
}